package juego.movimientos;



import juego.entidad.Entidad;
import juego.entidad.EntidadColisionable;
import juego.main.MainWin;
import juego.main.SoundPlayer;
import juego.niveles.generator.Nivel;
import juego.personaje.mario.Mario;


/**
 * Esta clase modela el movimiento saltar.
 * @author Latini Macarena
 * @author Rosas Tifany.
 *
 */
public class MovimientoSaltar extends Thread {
	
	protected Mario personaje;
	protected MainWin main;
	protected Nivel nivel;
	
	/**
	 * Constructor: Inicializa las variables de instancia.
	 * @param p Personaje Mario.
	 * @param m MainWin para el manejo de hilos.
	 * @param n Nivel al cual pertenece.
	 */
	public MovimientoSaltar( Mario p, MainWin m , Nivel n)
	{
		this.personaje = p;
		main=m;
		nivel=n;
	}
	
	
	/**
	 * Determina si puede saltar o no.
	 * No permite saltar si ya esta saltando.
	 */
	private boolean consistencia(){
		int y = this.personaje.getGrafico().getLocation().y;
		if( y==352){
			return true;
		} else {
			Entidad ent = personaje.getGravedad().buscarEntidad(personaje);
			if (ent != null) {
				return true;
			}else{
				return false;
			}			
		}			
		
	}
	
	
	
	/**
	 * Metodo que se ejecuta continuamente.
	 * Mueve a Mario logrando el efecto de un salto.
	 */
	public void run()
	{	
		if(!main.terminoPartida())
		{
			if(consistencia())
			{
				boolean encontre=false;
				main.setControlSalto(true);
				for( int i = 0; (i<8)&& (!encontre); i++ )
				{
					try
					{
						int x=personaje.getGrafico().getLocation().x;
						int y=personaje.getGrafico().getLocation().y;
						EntidadColisionable e=nivel.getEntidadDeArriba(x, y);
						if(e==null){
							this.personaje.getGrafico().setLocation( this.personaje.getGrafico().getLocation().x,
									this.personaje.getGrafico().getLocation().y -16 );
							this.personaje.setPosicion(this.personaje.getGrafico().getLocation().x,
									this.personaje.getGrafico().getLocation().y-16 );
							Thread.sleep(40);
						}
						else
						{
							encontre=true;
							//Mario choco de cabeza con algo
							e.colisionPorAbajo(personaje);
						}
					} catch (Exception e)
					{}
				}
				SoundPlayer s= new SoundPlayer("/juego/musica/jump.mp3");
				s.play();
				main.setControlSalto(false);
			}
		}
	}	

}
